package cn.mesmile.message.model.email.entity;

import java.util.concurrent.TimeUnit;

public class Test {

    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            final int param = i;
            //Lambda表达式方式
            ThreadPools.exampleExecutor.submit(() -> {
                try {
                    TimeUnit.SECONDS.sleep(3);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+" 执行参数："+param);
            });
        }

        //执行此函数后线程池不再接收新任务，并等待所有任务执行完毕后销毁线程。此函数不会等待销毁完毕
        ThreadPools.exampleExecutor.shutdown();

        //执行此函数后线程池不再接收新任务，并等待所有任务执行完毕后销毁线程。此函数不会等待销毁完毕
        // executor.shutdown();
        //立即结束所有线程，不管是否正在运行，返回未执行完毕的任务列表
        // executor.shutdownNow();
        /*
        我们知道，使用shutdownNow方法，可能会引起报错，使用shutdown方法可能会导致线程关闭不了。
        所以当我们使用shutdownNow方法关闭线程池时，一定要对任务里进行异常捕获。
        当我们使用shuwdown方法关闭线程池时，一定要确保任务里不会有永久阻塞等待的逻辑，否则线程池就关闭不了。
        最后，一定要记得，shutdownNow和shuwdown调用完，线程池并不是立马就关闭了，要想等待线程池关闭，
        还需调用awaitTermination方法来阻塞等待。
         */
    }

}